﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using AppFx.Reflection;

namespace AppFx.Interpretation
{
	/// <summary>
	/// Eine Schnittstelle, welche Auswertungsmöglichkeiten von Ausdrücken (strings) beschreibt.
	/// </summary>
	public interface IEvaluator<T>
	{
		/// <summary>
		/// Parst/Analysiert einen Ausdruck zur späteren Auswertung einzelner Objekte/Listenelemente.
		/// </summary>
		/// <param name="expression">Ausdruck, der zu analysieren ist.</param>
		void Parse(string expression, object item);

		/// <summary>
		/// Wertet den zuvor geparsten Ausdruck eines Objekts/Listenelements anhand des übergebenen Elements aus.
		/// </summary>
		/// <param name="item">Listenelement, welches die benötigten Daten zur Verfügung stellt.</param>
		/// <returns>Das Ergebnis der Auswertung.</returns>
		T Evaluate(object item);

		/// <summary>
		/// Listenelement, zu welchem die einzelnen Elemente gehören.
		/// </summary>
		IIndexList Context { get; set; }
	}
}
